﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
//using KEW.InterFace;
//using DaInterFace;
namespace DaSub.UMode
{
    public enum Mode_ChangeChannel : int
    {
        No1 = 0,
        No2 = 1
    }

    public class HModeInfo
    {
        /// <summary>
        /// IP地址
        /// </summary>
        public String IP = "";
        /// <summary>
        /// 全景图
        /// </summary>
        public byte[] FullImage;
        /// <summary>
        /// 车牌小图
        /// </summary>
        public byte[] PlateImage;
        /// <summary>
        /// 车牌号
        /// </summary>
        public String CarNo;
        /// <summary>
        /// 车牌颜色
        /// </summary>
        public String Color;
        /// <summary>
        /// 触发时间
        /// </summary>
        public DateTime ReciveTime;

        public HModeInfo(int BIG_PICSTREAM_SIZE_EX, int SMALL_PICSTREAM_SIZE_EX)
        {
            FullImage = new byte[BIG_PICSTREAM_SIZE_EX];
            PlateImage = new byte[SMALL_PICSTREAM_SIZE_EX];
        }
    }
    public class HModeItem
    {
        public HModeItem()
        {

        }
        public Boolean OnLine = false;
        public String IP = "";


    }

    public delegate void ReviceDataHandler(HModeInfo info);

    public class HMode
    {
        private HModeInfo _results1 = new HModeInfo(KHTSDK.BIG_PICSTREAM_SIZE_EX, KHTSDK.SMALL_PICSTREAM_SIZE_EX);
        private HModeInfo _results2 = new HModeInfo(KHTSDK.BIG_PICSTREAM_SIZE_EX, KHTSDK.SMALL_PICSTREAM_SIZE_EX);

        private HModeItem _item1 = new HModeItem();
        private HModeItem _item2 = new HModeItem();

        private Boolean _isClear = true;

        private List<string> _ips = new List<string>();
        //连接状态
        private KHTSDK.WTYConnectCallback ConnectCallback = null;
        //JPEG流
        //private KHTSDK.WTYJpegCallback JpegExCallback = null;
        //识别结果
        private KHTSDK.WTYDataEx2Callback DataExCallbcak = null;

        public HModeInfo Results1 { get { return _results1; } }
        public HModeInfo Results2 { get { return _results2; } }

        public Boolean IsClear { get { return _isClear; } set { _isClear = value; } }

        public HMode()
        {

            try
            {
                KHTSDK.WTY_QuitSDK();

                //this.ConnectCallback = new KHTSDK.WTYConnectCallback(this.ConnectStatue);
                //this.JpegExCallback = new KHTSDK.WTYJpegCallback(this.JpegCallback);
                this.DataExCallbcak = new KHTSDK.WTYDataEx2Callback(this.DataCallback);

                // 注册通讯状态的回调函数（必选）
                KHTSDK.WTY_RegWTYConnEvent(this.ConnectCallback);

                // 注册获取JPEG流的回调函数(可选)
                //KHTSDK.WTY_RegJpegEvent(this.JpegExCallback);

                // 注册获取识别结果的回调函数（必选）
                KHTSDK.WTY_RegDataEx2Event(this.DataExCallbcak);

            }
            catch (Exception ex)
            {

            }
        }

        HModeItem item = null;

        public Boolean Add(String ip, Mode_ChangeChannel channel)
        {
            Boolean retbool = false;
            int ret;
            IntPtr pIP = Marshal.StringToHGlobalAnsi(ip.Trim());

            ret = KHTSDK.WTY_InitSDK(8080, IntPtr.Zero, 0, pIP);
            if (ret == 0)
            {
                _ips.Add(ip);

                switch (channel)
                {
                    case Mode_ChangeChannel.No1:
                        item = _item1;
                        break;
                    case Mode_ChangeChannel.No2:
                        item = _item2;
                        break;
                }
                item.IP = ip;
                item.OnLine = true;
                retbool = true;
            }

            return retbool;
        }


        private void SaveImage(String fileName, Byte[] data)
        {
            if (data != null && data.Length > 0)
            {
                System.Drawing.Image image = System.Drawing.Image.FromStream(new System.IO.MemoryStream(data));
                image.Save(fileName);
                image.Dispose();
                image = null;
            }
        }

        public void Clear()
        {
            Array.Clear(_results1.FullImage, 0, _results1.FullImage.Length);
            Array.Clear(_results1.PlateImage, 0, _results1.PlateImage.Length);
            Array.Clear(_results2.FullImage, 0, _results2.FullImage.Length);
            Array.Clear(_results2.PlateImage, 0, _results2.PlateImage.Length);

            _results1.CarNo = "";
            _results1.Color = "";
            _results2.CarNo = "";
            _results2.Color = "";

            IsClear = true;
        }

        // 将byte[]转成指定的结构体
        private StructType ConverBytesToStructure<StructType>(byte[] bytesBuffer)
        {
            // 检查长度
            if (bytesBuffer.Length != Marshal.SizeOf(typeof(StructType)))
            {
                throw new ArgumentException("bytesBuffer参数和structObject参数字节长度不一致。");
            }

            IntPtr bufferHandler = Marshal.AllocHGlobal(bytesBuffer.Length);
            for (int index = 0; index < bytesBuffer.Length; index++)
            {
                Marshal.WriteByte(bufferHandler, index, bytesBuffer[index]);
            }
            StructType structObject = (StructType)Marshal.PtrToStructure(bufferHandler, typeof(StructType));
            Marshal.FreeHGlobal(bufferHandler);

            return structObject;
        }

        public bool CaptureImage()
        {
            int ret = KHTSDK.WTY_SetTrigger(item.IP, 8080);
            if (ret < 0)
            {
                return false;
            }

            return true;
        }

        public HModeInfo info = null;

        public unsafe void DataCallback(IntPtr recResult)
        {
            plate_result_ex recRes;
            string sIp;
            /*        注：
                    客户在挂接的时候，不要将自己的事物处理放到此回调函数中。
                    否则，可能会影响DLL的正常工作。
                    将识别数据拷贝全局缓冲区，去处理。*/
            plate_result_ex recResult_ss = new plate_result_ex();
            int size = Marshal.SizeOf(recResult_ss);
            byte[] bytes1 = new byte[size];
            Marshal.Copy(recResult, bytes1, 0, size);
            recRes = ConverBytesToStructure<plate_result_ex>(bytes1);

            sIp = new string(recRes.chWTYIP);
            sIp = sIp.Replace("\0", "");
            //HModeInfo info = null;
            String videoname = "";
            if (sIp == _item1.IP)
            {
                info = _results1;
                videoname = "1#相机";
            }
            else if (sIp == _item2.IP)
            {
                info = _results2;
                videoname = "2#相机";
            }
            if (info != null)
            {
                String carno = new string(recRes.chLicense).Trim();
                if (info.CarNo != carno)
                {
                    Array.Clear(info.FullImage, 0, info.FullImage.Length);
                    Marshal.Copy(recRes.pFullImage.pBuffer, info.FullImage, 0, recRes.pFullImage.nLen);

                    Array.Clear(info.PlateImage, 0, info.PlateImage.Length);
                    Marshal.Copy(recRes.pPlateImage.pBuffer, info.PlateImage, 0, recRes.pPlateImage.nLen);

                    info.CarNo = carno;
                    info.Color = new string(recRes.chColor).Trim();
                    info.ReciveTime = DateTime.Now;

                }

                IsClear = false;
            }
        }

        public void Exit()
        {
            KHTSDK.WTY_QuitSDK();
        }
    }

    #region （引用）
    [StructLayout(LayoutKind.Sequential)]
    public struct NetCamera_info
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public char[] cameraName; /* 当前相机的名称 */
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chIP; /* IP地址 	 */
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chGateway; /* 网关地址	 */
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chNetmask; /* 子网掩码 	 */
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chDNS; /* DNS服务器	 */
    }

    /* 相机时间 */
    [StructLayout(LayoutKind.Sequential)]
    public unsafe struct camera_time
    {
        public Int32 Year;           /* 年 */
        public Int32 Month;          /* 月 */
        public Int32 Day;            /* 日 */
        public Int32 Hour;           /* 时 */
        public Int32 Minute;         /* 分 */
        public Int32 Second;         /* 秒 */
        public Int32 Millisecond;    /* 微妙 */
    }

    /* 识别结果坐标 */
    [StructLayout(LayoutKind.Sequential)]
    public unsafe struct plate_location
    {
        public Int32 Left;	/* 左 */
        public Int32 Top;	/* 上 */
        public Int32 Right;	/* 右 */
        public Int32 Bottom;/* 下 */
    }

    /* 识别结果 */
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public unsafe struct plate_result
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chWTYIP;                          /* 相机IP           */
        public Int32 nFullLen;                          /* 全景图像数据大小 */
        public Int32 nPlateLen;                         /* 车牌图像数据大小 */
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 200000 - 312)]
        public byte[] chFullImage;                      /* 全景图像数据 	*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10000)]
        public byte[] chPlateImage;                     /* 全景图像数据 	*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public char[] chColor;                          /* 车牌颜色 		*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chLicense;                        /* 车牌号码 		*/
        public plate_location pcLocation;	    	    /* 车牌在图像中的坐标 */
        public camera_time shootTime;		    		/* 识别出车牌的时间 */
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public char[] reserved;
    }









    /*--------------------从7.1.6.0版本起，新增加识别结果-----------------------------*/

    [StructLayout(LayoutKind.Sequential)]
    public unsafe struct LPRC_IMAGE_INFO
    {
        public Int32 nWidth;							/* 宽度					*/
        public Int32 nHeight;						    /* 高度					*/
        public Int32 nPitch;							/* 图像宽度的一行像素所占内存字节数*/
        public Int32 nLen;							    /* 图像的长度			*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] reserved;     					/* 预留     			*/
        public IntPtr pBuffer;				    		/* 图像内存的首地址		*/
    }

    /*--------------------从7.1.6.0版本起，新增加识别结果-----------------------------*/
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public unsafe struct plate_result_ex
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chWTYIP;                          /* 相机IP           */
        /*public Int32 nFullLen;                         /* 全景图像数据大小 */
        /*public Int32 nPlateLen;                        /* 车牌图像数据大小 */
        /*[MarshalAs(UnmanagedType.ByValArray, SizeConst = 200000 - 312)]
        /*public byte[] chFullImage;                     /* 全景图像数据 	*/
        /*[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10000)]
        /*public byte[] chPlateImage;                    /* 全景图像数据 	*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public char[] chColor;                          /* 车牌颜色 		*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chLicense;                        /* 车牌号码 		*/
        public plate_location pcLocation;	    	    /* 车牌在图像中的坐标 */
        public camera_time shootTime;		    		/* 识别出车牌的时间 */
        public Int32 nConfidence;                       /* 车牌可信度			*/
        public Int32 nTime;								/* 识别耗时				*/
        public Int32 nDirection;						/* 车牌方向		    	*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public char[] reserved;
        public LPRC_IMAGE_INFO pFullImage;              /* 全景图像数据(注意：相机不传输，此处指针为空) */
        public LPRC_IMAGE_INFO pPlateImage;             /* 车牌图像数据(注意：相机不传输，此处指针为空) */
    }




    /* 车牌配置参数 */
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public unsafe struct PlateIDCfg
    {
        public Int32 nMinPlateWidth;		/*  车牌最小宽度				*/
        public Int32 nMaxPlateWidth;		/*  车牌最大宽度				*/
        public Int32 bMovingImage;		    /*  识别运动图像还是静止图像	*/
        /*  		1：运动				*/
        /*  		0：静止				*/
        public Int32 bIsNight;		    	/*  是否是夜间模式				*/
        /*  		1：是				*/
        /*  		0：不是				*/
        public Int32 nDataTransChannel;	    /*  	数据传输的通道			*/
        /*  		0：网络传输通道		*/
        /*  		1：串口传输通道		*/
        /*  		2：网络和串口同时传输*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public char[] szProvince0;	            /*  默认省份					*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public char[] szProvince1;	            /*  默认省份					*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public char[] szProvince2;	            /*  默认省份					*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public char[] reserved;
    }

    /* 相机版本信息 */
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public unsafe struct CameraVer_info
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
        public char[] chHardwareVer;		/*  硬件版本信息		*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
        public char[] chSystemVer;		/*  系统版本信息		*/
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
        public char[] chApplicationVer;	/*  应用程序版本信息	*/
    };


    /* 设备发送的数据 */
    [StructLayout(LayoutKind.Sequential)]
    public unsafe struct DevData_info
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public char[] chIp;
        public IntPtr pchBuf;
        public Int32 nLen;
        public Int32 nStatus;				/* Current recv data status. 0:Normal, other:Non-normal */

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public char[] reserved;
    }


    class KHTSDK
    {
        public const int BIG_PICSTREAM_SIZE = 200000 - 312;
        public const int SMALL_PICSTREAM_SIZE = 10000;
        public const int BIG_PICSTREAM_SIZE_EX = 1 * 800 * 1024 - 312;		//相机上传全景图占用内存的最大大小
        public const int SMALL_PICSTREAM_SIZE_EX = 10000;			//相机上传车牌截图占用内存的最大大小
        #region 智能抓拍一体机回调函数


        /************************************************************************/
        /* 回调函数: 获取报警信息的回调函数										*/
        /*		Parameters:														*/
        /*			alarmInfo[out]:		报警信息								*/
        /*		Return Value:   void											*/
        /*																		*/
        /*		Notice:															*/
        /*			一台PC连接多台设备时，此函数仅需实现一次。当区分不同设备	*/
        /*			的Alarm时，可以通过输出参数中KHT_DevData中的chIp来区分		*/
        /*																		*/
        /************************************************************************/
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public unsafe delegate void WTYAlarmCallback(IntPtr alarmInfo);


        /************************************************************************/
        /* 回调函数: 通知相机设备通讯状态的回调函数								*/
        /*		Parameters:														*/
        /*			chWTYIP[out]:		返回设备IP								*/
        /*			nStatus[out]:		设备状态：0表示网络异常或设备异常；		*/
        /*										  1表示网络正常，设备已连接		*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void WTYConnectCallback(StringBuilder chWTYIP, UInt32 nStatus);


        /************************************************************************/
        /* 回调函数: 获取Jpeg流的回调函数										*/
        /*		Parameters:														*/
        /*			JpegInfo[out]:		JPEG流数据信息							*/
        /*		Return Value:   void											*/
        /*																		*/
        /*		Notice:															*/
        /*			一台PC连接多台设备时，此函数仅需实现一次。当区分不同设备	*/
        /*			的JPEG流时，可以通过输出参数中KHT_DevData中的chIp来区分		*/
        /*																		*/
        /************************************************************************/
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public unsafe delegate void WTYJpegCallback(IntPtr JpegInfo);



        /************************************************************************/
        /* 回调函数: 获取识别结果的回调函数										*/
        /*		Parameters:														*/
        /*			chWTYIP[out]:		收到对应设备上传的数据					*/
        /*			chPlate[out]:		车牌号码								*/
        /*			chColor[out]:		车牌颜色								*/
        /*			chFullImage[out]:	全景图数据								*/
        /*			nFullLen[out]:		全景图数据长度							*/
        /*			chPlateImage[out]:	车牌图数据								*/
        /*			nPlateLen[out]:		车牌图数据长度							*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void WTYDataCallback(StringBuilder sIP, StringBuilder sPlate,
                                           StringBuilder sColor, IntPtr sFullImage, Int32 nFullLen,
                                           IntPtr sPlateImage, Int32 nPlateLen);

        /************************************************************************/
        /* 回调函数: 获取识别结果的回调函数										*/
        /*		Parameters:														*/
        /*			recResult[out]:		识别结果数据							*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public unsafe delegate void WTYDataExCallback(IntPtr recResult);


        /************************************************************************/
        /*--------------------------7.1.6.0新增---------------------------------*/
        /* 回调函数: 获取识别结果的回调函数										*/
        /*		Parameters:														*/
        /*			recResult[out]:		识别结果数据							*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public unsafe delegate void WTYDataEx2Callback(IntPtr recResult);


        //Jpeg数据回调
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void WTYGetJpegStreamCallback(IntPtr pData);

        #endregion

        /************************************************************************/
        /* WTY_InitSDK: 连接相机												*/
        /*		Parameters:														*/
        /*			nPort[in]:		连接相机的端口，现默认为8080				*/
        /*			hWndHandle[in]:	接收消息的窗体句柄，当为NULL时，表示无窗体  */
        /*			uMsg[in]:		用户自定义消息，当hWndHandle不为NULL时，	*/
        /*							检测到有新的车牌识别结果并准备好当前车牌	*/
        /*							缓冲区信息后，用::PostMessage 给窗口		*/
        /*							hWndHandle发送uMsg消息，其中WPARAM参数为0，	*/
        /*							LPARAM参数为0								*/
        /*			chServerIP[in]:	相机的IP地址								*/
        /*		Return Value:   int												*/
        /*							0	相机连接成功							*/
        /*							1	相机连接失败							*/
        /*		Notice:   														*/
        /*				如果采用回调的方式获取数据时，hWndHandle句柄为NULL，	*/
        /*				uMsg为0，并且注册回调函数，通知有新的数据；				*/
        /*				反之，在主窗口收到消息时，调用WTY_GetVehicleInfo获取	*/
        /*				数据。													*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern int WTY_InitSDK(UInt32 nPort, IntPtr hWndHandle, UInt32 uMsg, /*ref  string*/IntPtr chServerIP);

        /************************************************************************/
        /* WTY_QuitSDK: 断开所有已经连接设备，释放资源							*/
        /*		Parameters:														*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Auto)]
        public static extern void WTY_QuitSDK();



        /************************************************************************/
        /* KHT_RegAlarmEvent: 注册获取报警信息的回调函数						*/
        /*		Parameters:														*/
        /*			AlarmInfo[in]:		KHTAlarmExCallback类型回调函数			*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, EntryPoint = "WTY_RegAlarmEvent", SetLastError = true)]
        public static extern void WTY_RegAlarmEvent(WTYAlarmCallback AlarmInfo);


        /************************************************************************/
        /* WTY_RegWTYConnEvent: 注册通讯状态的回调函数							*/
        /*		Parameters:														*/
        /*			WTYConnect[in]:		ConnectCallback类型回调函数				*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, EntryPoint = "WTY_RegWTYConnEvent", SetLastError = true)]
        public static extern void WTY_RegWTYConnEvent(WTYConnectCallback WTYConnect);



        /************************************************************************/
        /* KHT_RegJpegEvent: 注册获取Jpeg流的回调函数							*/
        /*		Parameters:														*/
        /*			JpegInfo[in]:		KHTJpegExCallback类型回调函数			*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, EntryPoint = "WTY_RegJpegEvent", SetLastError = true)]
        public static extern void WTY_RegJpegEvent(WTYJpegCallback JpegInfo);


        /************************************************************************/
        /* 回调函数: 注册接收识别数据回调函数	(老的调用方式)					*/
        /*		Parameters:														*/
        /*			recResult[out]:		识别结果数据							*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, EntryPoint = "WTY_RegDataEvent", SetLastError = true)]
        public static extern void WTY_RegDataEvent(WTYDataCallback WTYData);

        /************************************************************************/
        /* WTY_RegDataExEvent: 注册获取识别结果的回调函数  (新的调用方式)		*/
        /*		Parameters:														*/
        /*			WTYData[in]:		函数指针								*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, EntryPoint = "WTY_RegDataExEvent", SetLastError = true)]
        public static extern void WTY_RegDataExEvent(WTYDataExCallback WTYDataEx);

        /************************************************************************/
        /*-------------------------7.1.6.0--------------------------------------*/
        /* WTY_RegDataExEvent: 注册获取识别结果的回调函数  (7.1.6.0)		*/
        /*		Parameters:														*/
        /*			WTYData[in]:		函数指针								*/
        /*		Return Value:   void											*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, EntryPoint = "WTY_RegDataEx2Event", SetLastError = true)]
        public static extern void WTY_RegDataEx2Event(WTYDataEx2Callback WTYDataEx);




        /************************************************************************/
        /* WTY_CheckStatus: 主动检查设备的通讯状态							    */
        /*		Parameters:														*/
        /*			chWTYIP[in]:		要检查的相机的IP						*/
        /*		Return Value:   int												*/
        /*							0	正常									*/
        /*							1	网络不通								*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern int WTY_CheckStatus(string chWTYIP);



        /************************************************************************/
        /* 	函数: 获取指定IP的相机识别结果，当WTY_initSDK函数中设置了窗体句		*/
        /*			柄，以及消息时，需要调用此函数来主动获取识别结果。			*/
        /*		Parameters:														*/
        /*			chWTYIP[in]:		收到对应设备上传的数据					*/
        /*			chPlate[in]:		车牌号码								*/
        /*			chColor[in]:		车牌颜色								*/
        /*			chFullImage[in]:	全景图数据								*/
        /*			nFullLen[in]:		全景图数据长度							*/
        /*			chPlateImage[in]:	车牌图数据								*/
        /*			nPlateLen[in]:		车牌图数据长度							*/
        /*		Return Value:   int												*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern int WTY_GetVehicleInfo(StringBuilder chWTYIP, StringBuilder sPlate, StringBuilder nColor, IntPtr chFullImage, ref int nFullLen, IntPtr chPlateImage, ref int nPlateLen);

        /************************************************************************/
        /* WTY_SetSavePath: 如果用户需要直接将图片存储，需设置存储路径，对应各	*/
        /*		个图像路径及文件名称如下，不需要存储时，可以不调用此函数。		*/
        /*		Parameters:														*/
        /*			chSavePath[in]:	文件存储路径，以"\\"结束，如："D:\\Image\\"	*/
        /*		Return Value:   void											*/
        /*																		*/
        /*		Notice:   														*/
        /*				全景图：指定目录\\设备IP\\年月日（YYYYMMDD）\\FullImage\\时分秒-毫秒__颜色_车牌号码__.jpg	*/
        /*				车牌图：指定目录\\设备IP\\年月日（YYYYMMDD）\\PlatelImage\\时分秒-毫秒__颜色_车牌号码__.jpg	*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern void WTY_SetSavePath(string chSavePath);

        /************************************************************************/
        /* WTY_SetTrigger: 触发识别												*/
        /*		Parameters:														*/
        /*			pCameraIP[in]:			相机IP								*/
        /*			nCameraPort[in]:		端口								*/
        /*		Return Value:													*/
        /*			触发成功返回	0											*/
        /*			失败返回	-1												*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern int WTY_SetTrigger(string chWTYIP, Int32 nCameraPort);



        /************************************************************************/
        /* WTY_RebootSystem: 重启相机。											*/
        /*		Parameters:														*/
        /*			pCameraIP[in]:		相机IP									*/
        /*			nCameraPort[in]:	相机端口								*/
        /*		Return Value:   int												*/
        /*							1	发送成功								*/
        /*							0	发送失败								*/
        /*							-1	连接相机失败							*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern int WTY_RebootSystem(string chWTYIP, Int32 nCameraPort);

        /************************************************************************/
        /* 函数说明: 读取版本信息												*/
        /*		Parameters:														*/
        /*			pCameraIP[in]:			相机IP								*/
        /*			nCameraPort[in]:		端口								*/
        /*			pCameraVerInfo[in]:		相机版本信息						*/
        /*		Return Value:   int												*/
        /*							0	读取成功								*/
        /*							-1	读取失败								*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern int WTY_ReadVersion(string chWTYIP, Int32 nCameraPort, StringBuilder chHardwareVer, StringBuilder chSystemVer, StringBuilder chApplicationVer);

        /************************************************************************/
        /* WTY_SetTransContent: 控制设备上传内容						        */
        /*		Parameters:														*/
        /*			nFullImg[in]:		全景图，0表示不传，1表示传				*/
        /*			nFullImg[in]:		车牌图，0表示不传，1表示传				*/
        /*		Return Value:   int												*/
        /*							0	成功									*/
        /*							-1	失败									*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern int WTY_SetTransContent(string pCameraIP, Int32 nCameraPort, Int32 nFullImg, Int32 nPlateImg);

        /************************************************************************/
        /* 函数说明: 控制继电器的闭合											*/
        /*		Parameters:														*/
        /*			pCameraIP[in]:			相机IP								*/
        /*			nCameraPort[in]:		端口								*/
        /*		Return Value:   int												*/
        /*							0	设置成功								*/
        /*							-1	设置失败								*/
        /*		Notice:   														*/
        /*				通过此功能，可以在PC端通过一体机设备，来控制道闸的抬起	*/
        /*																		*/
        /*				注意：设备继电器输出信号为：开关量信号。				*/
        /************************************************************************/
        [DllImport("WTY.dll", CharSet = CharSet.Ansi)]
        public static extern int WTY_SetRelayClose(string pCameraIP, Int32 nCameraPort);

    }


    #endregion
}
